<?php if (!defined('BASEPATH'))exit('No direct script access allowed');

include_once 'main.php';

/**
 * Controller para ações de Editora
 * 
 * @author Douglas Rafael
 * @package controllers     
 */
class Editora extends Main {

    public function __construct() {
        parent::__construct();
        //Verifica se o usuário estar logado no sistema
        $this->verificaLogado();
        
        //carrega a class DAOEditora
        $this->load->model('DAOEditora');

        //Seta propriedades do template
        $arr_js = $this->config->item('js');
        array_push($arr_js, 'maskedinput');
        $this->template->load_js($arr_js);
        $this->template->set('title', 'Cadastro de Editora || ' . $this->title);
        $this->template->set('page_title', 'Cadastro de Editora');
        $this->template->set('page_infor', '<h2 class="title-infor">informações gerais</h2>
                        <p>Não é permitido cadastro duplicado de <span class="bold">EDITORAS</span>, então verifique se a editora a ser inserida não possui cadastro.</p>
                        <p><span class="bold">Só é possível excluir uma EDITORA se ela não estiver relacionada com um ITEM (livro, magazine...).</span></p>
                        <p class="bold"><span class="bold">ALT + N</span> Abre o formulário para cadastrar uma nova Editora.</p>
                        <p><span class="bold">ESC</span> Fecha o formulário.</p>
                        <p><span class="bold">Duplo clique</span> sobre o registro, abre formulário para edição dos dados.</p>');
    }

    public function index() {
        $this->listar();
    }

    /**
     * Carrega a view com a lista de editoras
     */
    public function listar() {
        try {
            $this->verificaPermissao(ControleAcesso::CONSULTAR_EDITORA);
            // Removendo a variavel 'searchterm' da sessão
            $this->session->unset_userdata('searchterm');

            $init = ($this->uri->segment(6)) ? $this->uri->segment(6) : 0;
            $this->treat_orderby();

            $total_pagina = $this->uri->segment(5) ? $this->uri->segment(5) : 10;
            $editoras = $this->DAOEditora->select_all_publishers($init, $total_pagina, $this->order_by, $this->direction);
            $total_rows = $this->DAOEditora->amount_all_publishers();

            // paginação
            $config['uri_segment'] = 6;
            $config['per_page'] = $total_pagina;
            $config['base_url'] = base_url() . "editora/listar/" . $this->order_by_name . "/" . $this->direction_name . '/' .$total_pagina;
            $config['total_rows'] = $total_rows;
            $this->pagination->initialize($config);

            //data
            $data['total_rows'] = $this->treat_number_rows($total_rows);
            $data['pagination'] = $this->pagination->create_links();
            $data['editoras'] = $editoras;
            $data['quant_list'] = $total_pagina;

            $this->template->load(NULL, 'editora_list', $data, FALSE, TRUE);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->view_list_publisher();
        }
    }

    /**
     * Retorna via json a editora selecionado
     */
    public function get_publisher() {
        try {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("idEditora", "Código", "trim|required|min_length[5]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                echo validation_errors();
            } else {
                $editora = new TOEditora();
                $editora->id = $this->input->post('idEditora', TRUE);

                $data['editora'] = $this->DAOEditora->get_publisher($editora);
                echo json_encode($data);
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->view_list_publisher();
        }
    }

    /**
     * Cadastra Editora
     * 
     * @throws ExceptionValidacao
     */
    public function cadastrar() {
        try {
            $this->verificaPermissao(ControleAcesso::CADASTRAR_EDITORA);
            $this->load->library('form_validation');
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[2]|xss_clean");
            $this->form_validation->set_rules("telefone", "Telefone", "trim|min_length[15]|max_length[15]|xss_clean");
            $this->form_validation->set_rules("email", "E-Mail", "trim|email|xss_clean");
            $this->form_validation->set_rules("site", "Site", "trim|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $editora = new TOEditora();
                $editora->nome = $this->input->post('nome', TRUE);
                $editora->telefone = $this->input->post('telefone', TRUE);
                $editora->email = $this->input->post('email', TRUE);
                $editora->site = $this->input->post('site', TRUE);
                $this->DAOEditora->insert_publisher($editora);

                Mensagem::setMensagemSucesso("Editora: <span class='bold'>" . $this->input->post('nome') . "</span> cadastrada com sucesso.");
                $this->index();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }

    /**
     * Atualiza dados da Editora
     * 
     * @throws ExceptionValidacao
     */
    public function atualizar() {
        try {
            $this->verificaPermissao(ControleAcesso::ATUALIZAR_EDITORA);
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigo", "Código", "trim|required|is_natural|exact_lenght[6]|xss_clean");
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[2]|xss_clean");
            $this->form_validation->set_rules("telefone", "Telefone", "trim|min_length[15]|max_length[15]|xss_clean");
            $this->form_validation->set_rules("email", "E-Mail", "trim|email|xss_clean");
            $this->form_validation->set_rules("site", "Site", "trim|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $editora = new TOEditora();
                $editora->id = $this->input->post('codigo', TRUE);
                $editora->nome = $this->input->post('nome', TRUE);
                $editora->telefone = $this->input->post('telefone', TRUE);
                $editora->email = $this->input->post('email', TRUE);
                $editora->site = $this->input->post('site', TRUE);
                $this->DAOEditora->update_publisher($editora);

                Mensagem::setMensagemSucesso("Editora: <span class='bold'>" . $editora->nome . "</span> atualizada com sucesso.");
                $this->index();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }

    /**
     * Exclui Editora
     */
    public function excluir() {
        try {
            $this->verificaPermissao(ControleAcesso::EXCLUIR_EDITORA);
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigoDelete", "Código", "trim|required|xss_clean");
            $this->form_validation->set_rules("nomeDelete", "Nome", "trim|min_length[2]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $editora = new TOEditora();
                $editora->id = explode(',', $this->input->post('codigoDelete', TRUE)); // Monta array com os ids 
                $editora->nome = $this->input->post('nomeDelete', TRUE);
                $this->DAOEditora->delete_publisher($editora);

                $editora->nome != NULL ? Mensagem::setMensagemSucesso("Editora: <span class='bold'>" . $editora->nome . "</span> excluída com sucesso.") : Mensagem::setMensagemSucesso("Editoras  excluídas com sucesso!");

                $this->index();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }

    /**
     * Busca Editora
     */
    public function buscar() {
        try {
            $searchterm = $this->searchtermHandler($this->input->get_post('search_term', TRUE));
            $init = ($this->uri->segment(6)) ? $this->uri->segment(6) : 0;
            $this->treat_orderby();

            $total_pagina = $this->uri->segment(5) ? $this->uri->segment(5) : 10;
            $editoras = $this->DAOEditora->search_publisher($init, $total_pagina, $searchterm, $this->order_by, $this->direction);
            $total_rows = $this->DAOEditora->amount_search_publisher($searchterm);

            //paginação
            $config['uri_segment'] = 6;
            $config['per_page'] = $total_pagina;
            $config['base_url'] = base_url() . "editora/buscar/" . $this->order_by_name . "/" . $this->direction_name . '/' .$total_pagina;
            $config['total_rows'] = $total_rows;
            $this->pagination->initialize($config);

            //data
            $data['total_rows'] = $this->treat_number_rows($total_rows);
            $data['pagination'] = $this->pagination->create_links();
            $data['editoras'] = $editoras;
            $data['quant_list'] = $total_pagina;

            if ($total_rows == 0)
                Mensagem::setMensagem("Nenhum registro foi encontrado para essa pesquisa: <span class='bold'> $searchterm </span>", "aviso");

            $this->template->load(NULL, 'editora_list', $data, FALSE, TRUE);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }
    
    /**
     * Função para selciocionar editora no auto_complete
     */
    public function auto_complete_publisher() {
        $editora = new TOEditora();
        $editora->nome = $this->input->get('term', TRUE);

        echo json_encode($this->DAOEditora->suggestion_publisher($editora));
    }

    private function view_list_publisher() {
        $this->template->load(NULL, 'editora_list');
    }

}
